Re: DiskDevice API v2.1
"Ingo Weinhold" <bonefish-CFLBMwTPW48UNGrzBIF7/[email protected]>
| Newsgroups | gmane.os.openbeos.storage |
|---|---|
| Message-ID | <17114805562-BeMail@graete> |
Tyler Dauwalder <tyler-cyCl/[email protected]> wrote: > > > > > Okay, that seemed to be a stupid idea :) > > > > But we should make sure that the user can see which tasks still > > > > have > > > > to be carried out > > > We could add methods to BDiskDeviceRoster to provide support for > > > that. > > > The typical iteration methods (GetNextActiveJob(BDiskDeviceJob*), > > > RewindActiveJobs()) and watching support (StartWatchingJobs(), > > > StopWatchingJobs()). BDiskDeviceJob (or better name=3D3D3F) would > > > feature > > > methods for returning general information about the job, as well > > > as > > > its > > > current progress. > > > > Sounds good. > > I added: > > // disk device job types > enum { > B=5FDISK=5FDEVICE=5FJOB=5FCREATE, > B=5FDISK=5FDEVICE=5FJOB=5FDELETE, > B=5FDISK=5FDEVICE=5FJOB=5FINITIALIZE, > B=5FDISK=5FDEVICE=5FJOB=5FRESIZE, > B=5FDISK=5FDEVICE=5FJOB=5FMOVE, > B=5FDISK=5FDEVICE=5FJOB=5FDEFRAGMENT, > B=5FDISK=5FDEVICE=5FJOB=5FREPAIR, > } > > class BDiskDeviceJob { > public: > int32 ID() const; > uint32 Type() const; > uint8 Progress() const; // 0 to 100 Maybe better float with range 0 - 1.0=3F That would be more compatible with BStatusBar and is also easier to calculate. > bool Finished() const; > const char *Description() const; > > BPartition* Partition() const; > private: > int32 fPartitionID; > int32 fJobID; > }; > > // watchable events > enum { > B=5FDEVICE=5FREQUEST=5FMOUNT=5FPOINT =3D 0x01, // mount point changes > B=5FDEVICE=5FREQUEST=5FMOUNTING =3D 0x02, // mounting/unmounting > B=5FDEVICE=5FREQUEST=5FPARTITION =3D 0x04, // partition changes > B=5FDEVICE=5FREQUEST=5FDEVICE =3D 0x10, // device changes (media > changes) > B=5FDEVICE=5FREQUEST=5FDEVICE=5FLIST =3D 0x20, // device additions/ > removals > B=5FDEVICE=5FREQUEST=5FJOBS =3D 0x40, // job addition/initiation/ > completion > B=5FDEVICE=5FREQUEST=5FALL =3D 0xff, // all events > }; > > // notification message "event" field values > enum { > B=5FDEVICE=5FMOUNT=5FPOINT=5FMOVED, // mount point moved/renamed > B=5FDEVICE=5FPARTITION=5FMOUNTED, // partition mounted > B=5FDEVICE=5FPARTITION=5FUNMOUNTED, // partition unmounted > B=5FDEVICE=5FPARTITION=5FINITIALIZED, // partition initialized > B=5FDEVICE=5FPARTITION=5FRESIZED, // partition resized > B=5FDEVICE=5FPARTITION=5FMOVED, // partition moved > B=5FDEVICE=5FPARTITION=5FCREATED, // partition created > B=5FDEVICE=5FPARTITION=5FDELETED, // partition deleted > B=5FDEVICE=5FPARTITION=5FDEFRAGMENTED, // partition defragmented > B=5FDEVICE=5FPARTITION=5FREPAIRED, // partition repaired > B=5FDEVICE=5FMEDIA=5FCHANGED, // media changed > B=5FDEVICE=5FADDED, // device added > B=5FDEVICE=5FREMOVED, // device removed > B=5FDEVICE=5FJOB=5FADDED, // job added > B=5FDEVICE=5FJOB=5FINITIATED, // job initiated > B=5FDEVICE=5FJOB=5FFINISHED, // job finished > }; B=5FDEVICE=5FJOB=5FPROGRESS, // job progress Good idea or not=3F Another event mask flag may be sensible to be added - - though the disk=5Fdevice=5Fmanager should filter the progress notifications issued by the module anyway, so that not more than 10 or so per second are sent. > > class BDiskDeviceRoster { > public: > status=5Ft GetNextActiveJob(BDiskDeviceJob *job); > status=5Ft RewindActiveJobs(); > }; > > I added job watching in with the rest of the watching codes instead > of > adding a new set of functions for it (they also have their own > filter). > I also expanded B=5FDEVICE=5FPARTITION=5FCHANGED to be a specific code for > each type of change (initialize, resize, move, defrag, repair), since > we have specific functions for those everywhere else. And as you now > see, I added defragging and repairing to the API, too. So there are > also these additions: > > class BPartition { > public: > bool CanDefragment() const; > status=5Ft Defragment() const; > > bool CanRepair(bool checkOnly) const; > status=5Ft Repair(bool checkOnly) const; > }; > > class BDiskSystem { > public: > bool SupportsDefragmenting(BPartition *partition) const; > bool SupportsRepairing(BPartition *partition, bool checkOnly) > const; > }; > > Sound okay=3F I suppose `repair' means something like chkbfs=3F Parameters might be useful in this case, i.e. a parameter editor method could be added. CU, Ingo